package yl.hs.bmipfull.service.material;

import org.apache.ibatis.annotations.Param;
import yl.hs.bmipfull.pojo.material.PurchaseReceiptEntity;
import yl.hs.bmipfull.service.IBaseService;
import yl.hs.bmipfull.viewmodels.PageQuery;
import yl.hs.bmipfull.viewmodels.PageResult;
import yl.hs.bmipfull.viewmodels.SubmitModel;
import yl.hs.bmipfull.viewmodels.salemanmage.TimeGroupVO;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 作用:  采购产品单据信息服务层接口<br/>
 * 创建时间: 2021年05月19日 17时26分05秒 <br/>
 *
 * @author 吴高丰
 */

public interface IPurchaseReceiptService extends IBaseService {

    /**
     * 查询采购产品单据信息信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @return 采购产品单据信息-List<{@link PurchaseReceiptEntity}>
     * @throws Exception 查询参数异常
     */
    List<PurchaseReceiptEntity> queryList(PageQuery pageQuery) throws Exception;

    /**
     * 查询采购产品单据信息信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @param rowNum    每页条数
     * @param page      页码
     * @return 站内信息-List-SiteMessageMainEntity
     * @throws Exception 查询条件异常
     */
    PageResult<PurchaseReceiptEntity> queryPage(PageQuery pageQuery, int rowNum, int page,String productCateSn) throws Exception;

    /**
     * 根据采购产品单据信息编号查询采购产品单据信息信息
     *
     * @param sn 编号
     * @return 采购产品单据信息-{@link PurchaseReceiptEntity}
     */
    PurchaseReceiptEntity findBySn(String sn);

    /**
     * 保存采购产品单据信息信息
     *
     * @param model 采购产品单据信息表单信息
     * @param sn    采购产品单据信息信息原有编号
     * @return 执行结果-受影响行数-Integer
     * @throws Exception 保存异常
     */
    Integer savePurchaseReceipt(Map<String, Object> model, String sn) throws Exception;

    /**
     * 根据采购产品单据信息编号删除采购产品单据信息信息
     *
     * @param sn 采购产品单据信息编号
     * @return 影响行数
     */
    Integer delete(String[] sn);

    /**
     * 查询已完成入库的车牌信息
     */
    List<String> queryAllTruckPlate();

    /**
     * 根据单据状态，条数，排序字段查询单据信息
     */
    List<PurchaseReceiptEntity> queryByState(short state, int top, String sort, String key);

    /**
     * 根据车牌号查询最新一车信息
     *
     * @param truckPlate 车牌号
     * @return 入库单信息
     */
    PurchaseReceiptEntity queryByTruckPlate(String truckPlate);

    /**
     * 入库单作废
     * @param sn 入库单编号
     * @param cause 作废原因
     * @return 作废结果
     */
    Integer invalidOrder(String sn, String cause);

    /**
     * 保存入库单审核标注信息
     * @param submitModel 审核标注表单
     * @return 保存结果
     */
    Integer saveReviewFlag(SubmitModel submitModel) throws Exception;

    /**
     * 保存入库单重量调整信息
     * @param submitModel 重量调整表单
     * @return 保存结果
     */
    Integer saveWeightCheck(SubmitModel submitModel) throws Exception;

    /**
     * 保存入库单审核信息
     * @param submitModel 入库单审核表单
     * @return 保存结果
     */
    Integer saveReviewOrders(SubmitModel submitModel) throws Exception;

    /**
     * 根据编号修改状态
     * @param snList 编号
     * @param state 状态
     * @return 受影响行数
     */
    Integer changeStateBySN(String[] snList,short state);

    /**
     * 获取原材价格
     * @param contractSn 合同sn
     * @param rmSn 原材sn
     * @param inTime 入库时间
     * @return 价格
     */
    BigDecimal getRmPrice(String contractSn, String rmSn, Date inTime);

    /**
     * 获取入库单的入库年份和月份
     * @return 时间
     */
    List<TimeGroupVO> getSetTime();

    /**
     * 检查是否存在车辆暂存信息
     * @param truck 车牌号
     * @return 检查结果
     */
    boolean checkTruckTempOrderExist(String truck);

    Integer changeInHost(int state, String sn);

    Integer restore(String sn, String cause);
    Integer UpdateWarehouse(String sn,String rawinventsn);
    List<PurchaseReceiptEntity> averagePriceOfMaterials(PageQuery pageQuery,int rowNum, int page);
    List<PurchaseReceiptEntity> queryListByContractSn(String contractsn);
    Integer update(PurchaseReceiptEntity entity);
    Integer updateNetWeightBuSN(String sn,BigDecimal blockWeight,BigDecimal orgWeight);
    Integer FreightReviewOrders(SubmitModel submitModel);
    Integer updateUnloading(SubmitModel submitModel);
    PurchaseReceiptEntity queryByTruckPlateByState(String truckPlate);
}